EKS環境をsysdigでモニタリングしてみた(セットアップ編)
「みなさん、sysdig初めてみませんか?」
という軽いノリで始まりましたが、AWS Container Partnerにも名前を連ねるSysdigを触ってみたのでその様子をお届けいたします。今回はインストール編ということで、EKS環境の作成とSysdigエージェントの設定周辺をご紹介。その設定手順の様子を見ていただきながら、案外簡単に入るんだなぁというところ見てもらえれば幸いです。
(祭) ∧ ∧ Y ( ゚Д゚) Φ[_ソ__y_l〉 Sysdig マツリダワッショイ |_|_| し'´J
Sysdigとは?
Secure DevOps Platform for Cloud-Native | Sysdig
sysdigのVisionについては、こちらの動画によく出てます。作りがすごいドラマチック。
AWSのContaeinr Security Partnersにも名前を連ねています。
日本語だと、こちらの記事でSysdigが生まれてきた背景やアーキテクチャ上の特徴が端的に紹介されているので、非常に参考になります。ぜひこちらも御覧ください。
アーキテクチャ上の特徴は、Kubernetesベースのシステムにおいて、Podにエージェントを入れるのではなく、ノードにエージェントを入れる方法をとっており、ここからホストのカーネルにアクセスしてシステムコールを採取する方式です。
(引用元:https://thinkit.co.jp/article/15841)
メイン製品ラインとしては、Sysdig MonitorとSysdig Securityがあり、今回はSysdig Monitorのセットアップについてのブログとなります。
また、sysdigにはSaaS版とオンプレミス版の2つがありますが、今回はSaaS版を前提とした手順になっています。
EKS環境のモニタリングを完了させるまでの手順
今回、EKS環境をSysdigモニタリングするのですが、その大まかな手順をここでおさらいしておきましょう。といっても手順自体は全体的にシンプルで、Kubernetes環境が存在していれば、そんなに苦労するところは無いと思います。
- EKS環境をワーカーノード含めて作成し、適当なPodを動作させる
- Sysdigエージェントのアクセスキーを取得する
- kubernetesクラスターにSysdigエージェント用の設定を追加する
- AWSインテグレーション部分の設定を追加する
手順①:EKS環境をワーカーノード含めて作成し、適当なPodを動作させる
最初にKubernetes環境作っていきます。Kubernetes環境自体は別になにでも良いので、すでに適当な環境があるかたはそれをお使いください。
AWSでEKS環境をセットアップするのに一番簡単なのは、eksctl
を使う方法です。以下手順にそって、EKSクラスターを作成してみてください。
一点注意事項として、今回SysdigエージェントはワーカーノードにDaemonsetとして展開するため、ワーカーノードを作成する[Cluster with Linux-only workload]を利用して進めてください(Fargateではなく)。
ワーカーノードまでできあがったら、モニタリング用のPodを配置しましょう。なんでも良いのですが、自分はEKS Workshopで紹介されていた、以下のサンプルアプリを利用しました。
さて、無事、EKS環境出来上がりましたでしょうか?
手順②:Sysdigエージェントのアクセスキーを取得する
ここから、Sysdigの話になります。アクセスキーの発行にはライセンスが必要となるので、無料お試しからライセンスを取得してみましょう。日本語ページがわかりやすいと思います。
上から「無料お試し」からライセンスを取得してみてください。その後、流れの中でSysdig Agentのアクセスキーが表示されるのでそれをメモっておいてください。
もしくはセットアップ後、自分のアイコンをクリックし[Settings]→[Agent Installation]にアクセスでも、アクセスキーを確認できます。
手順③:kubernetesクラスターにSysdigエージェント用の設定を追加する
いよいよ、クラスターにSysdigエージェント用の設定を追加していきます。メインでkubectl
を使います。
エージェントインストールにあたり前提条件は以下の通り。
- エージェントインストール対象ホスト制限
- Host Requirements for Agent Installation
- EC2なら問題なし
- Kubernetesのバージョンが1.2以上
- sysdigエージェントはDaemonSetsでデプロイされるため、1.2以上のバージョンが必要となります
- Sysdigのアカウントとアクセスキー
- 事前にSysdingアカウントを作成し、ウェルカムウィザードでアクセスキーを取得しておきます
実際にインストールを実施していきます。公式マニュアルの手順は、以下を参照してみてください。
sysdig-cloud-scripts/agent_deploy/kubernetes at master · draios/sysdig-cloud-scriptsより、以下のファイルをダウンロードします。
sysdig-agent-clusterrole.yaml
sysdig-agent-daemonset-v2.yaml
sysdig-agent-configmap.yaml
curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-clusterrole.yaml curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-daemonset-v2.yaml curl -O https://raw.githubusercontent.com/draios/sysdig-cloud-scripts/master/agent_deploy/kubernetes/sysdig-agent-configmap.yaml
sysdigエージェント用の名前空間を設定します。名前空間の作成は任意ですが、sysdig関連のコンポーネントはそれなりに数があるため、管理上の手間も考えると名前空間(namespace)は作っておいたほうが良いです。今回は、Namespaceにsysdig-agent
を使います。
kubectl create ns sysdig-agent
sysdigエージェントが利用するシークレットを登録します。利用するAccess Keyは、「手順②:Sysdigエージェントのアクセスキーを取得する」を使います。下記の
を書き換えてください。
kubectl create secret generic sysdig-agent --from-literal=access-key=<your sysdig access key> -n sysdig-agent
kubernetesクラスター用のロール、サービスアカウントなどを定義していきます。
kubectl apply -f sysdig-agent-clusterrole.yaml -n sysdig-agent kubectl create serviceaccount sysdig-agent -n sysdig-agent kubectl create clusterrolebinding sysdig-agent --clusterrole=sysdig-agent --serviceaccount=sysdig-agent:sysdig-agent
ConfigMapを書く環境に合わせて修正します。kubernetesのStateメトリクスとクラスター名を有効化します。sysdig-agent-configmap.yaml
を開きます。以下の部分の、new_k8s
、k8s_cluster_name
の部分をコメントアウトして書き換えます。
修正前。
####################################### # new_k8s: true # k8s_cluster_name: production security: k8s_audit_server_url: 0.0.0.0 k8s_audit_server_port: 7765
修正後はこのようになります。cluster_nameは、各環境のkubernetesクラスター名を指定してください。
####################################### new_k8s: true k8s_cluster_name: <your cluster name> security: k8s_audit_server_url: 0.0.0.0 k8s_audit_server_port: 7765
修正が完了したら、Configmapを展開します。
kubectl apply -f sysdig-agent-configmap.yaml -n sysdig-agent
DaemonSetを展開します。
kubectl apply -f sysdig-agent-daemonset-v2.yaml -n sysdig-agent
これで、実際のsysdigエージェントがPodとしてRunning状態になっていればOKです。daemonsetやpodの状態を確認してみましょう。
$ kubectl get daemonset -n sysdig-agent NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE sysdig-agent 2 2 2 2 2 <none> 2d
$ kubectl get pod -n sysdig-agent NAME READY STATUS RESTARTS AGE sysdig-agent-bxqpz 1/1 Running 0 2d sysdig-agent-msmn4 1/1 Running 0 2d
こんな感じで、sysdigエージェントが起動していればOKです。ここまでOKでしょうか?後一息ですよ。
手順④:AWSインテグレーション部分の設定を追加する
最後に、Sysdig monitorからAWS環境に対して情報を取得するための認証情報を設定します。流れとしては、アクセス対象のAWSアカウントに権限をもつIAMユーザーを作成し、そのアクセスキーとシークレットキーをsysdig側に設定する流れとなります。詳細な手順は以下を参照してください。
AWSに慣れている方であれば、下記ポリシーを保有したIAMユーザーを作成し、その情報を[Settings]→[AWS]で設定すればOKです。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "autoscaling:Describe*", "cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*", "dynamodb:ListTables", "dynamodb:Describe*", "ec2:Describe*", "ecs:Describe*", "ecs:List*", "elasticache:DescribeCacheClusters", "elasticache:ListTagsForResource", "elasticloadbalancing:Describe*", "rds:Describe*", "rds:ListTagsForResource", "sqs:ListQueues", "sqs:GetQueueAttributes", "sqs:ReceiveMessage" ], "Effect": "Allow", "Resource": "*" } ] }
上記画面でStatusがOKになっていたら大丈夫です。
(重要)すべての設定が完了したらしばらく待つ
自分はここでしばらくハマりましたw エージェントも動いていて、AWSインテグレーションも設定したののに、いつまでたっても、Sysdig Monitorのエクスプローラーに何も表示されない場合は、しばらく待ちましょう。15分ほどまって、さらにSysdig管理画面からログアウトしてログインするなどして見ましょう。
しばらくまって、以下のように[EXPLORE]において、GROUPINGSにAWSのアイコンやKubernetesのアイコンが選択可能になっていたら、無事データが連携されています。お疲れさまでした!
セットアップ自体はシンプル。画面反映に時間がかかる
以上、Sysdig MonitorによるEKSクラスターへのセットアップ手順を紹介しました。丁寧にやっていけばそれほどハマリポイントも無いと思います。
sysdigのドキュメントはすべてこちらにまとめられているので、全体像を知るにはこちらをみてください。
セットアップが完了したので、この後は、EKSクラスターで展開したPodや各種リソースがどのように見えるのかを解説していきます。こちらの記事をご参照ください。
それでは、今日はこのへんで。濱田(@hamako9999)でした。